using UnityEngine;
using static WaterCylinder;

/*
使用时的武器
武器使用：调用handWeapon对象的UseWeapon方法，在方法里会调用Item的Use方法，
Item的Use方法调用Weapon重写的OnUse方法，OnUse方法调用Weapon及其子类可能重写的Shot方法
Shot方法用于发射子弹，Weapon的不同子类可以重写Shot方法以修改发射方式。
发射后的子弹会在发射时存入Weapon对象的currentBullet属性中，
该属性存放的是上一个发射的子弹，可以在Weapon的OnProcess方法里对其进行操作以达到修改子弹行进轨迹等操作
不支持修改上一个发射的子弹以外的子弹，如有需要可以选择构建Bullet的子类以自定义子弹
*/

public class HandWeapon : MonoBehaviour
{   
    public static HandWeapon CreatHandWeapon(Entity user, Weapon weapon){
        GameObject obj = Creat(GetPrefab("DefaultObject/Weapon"), user.weaponPos);
        obj.transform.parent = user.transform;
        HandWeapon hw = obj.GetComponent<HandWeapon>();
        hw.user = user;
        hw.weapon = weapon;
        hw.PickUp();
        return hw;
    }

    public Entity user;
    public Weapon weapon;
    public Coroutine mainProcess;
    
    //拿起武器
    public void PickUp(){
        mainProcess = StartCoroutine(weapon.Process());
        weapon.state = ItemState.OnUse;
        weapon.owner = user;
        weapon.handWeapon = this;
        if(user != null){
            if(user.TagCheck(EntityTag.WeaponDisplay)){
                GetComponent<SpriteRenderer>().sprite = weapon.sprite;
            }
        }
    }

    //放下武器
    public void PutAway(){
        StopCoroutine(mainProcess);
        Delete(gameObject);
    }

    public void Drop(){
        DropItem.CreatDropItem(user, weapon, user.dropPos);
        PutAway();
    }

    public void UseWeapon(int id = 0){
        weapon.Use(user, id);
    }
}
